
Introduction
*I'm not good at English, but if you can understand my story, isn't that enough? :)
When I made this application, especially as dialog based, a lot of buttons were used. Buttons are very important things in my situation. So I decided to make an Image button source.
As you know, there are many sources for image buttons. I think it's useless work making another image button. But those image buttons have a small problem.

In this image, button's background hides the parent's background. That's not what I want. So I am going to handle this problem.
Using the code
There are two ways using this button. First of all, include the following files to your project:
- KbcBmp.h,
- KbcBmp.cpp,
- KbcButton.h,
- KbcButton.cpp,
- Picture.h,
- Picture.cpp
Then, let's start~!
- Using
DDX_Control
- Include "KbcButton.h" in header file.
- Declare a
CKbcButton
variable in header file.
- Go to dialog resource and draw a button. Check 'Onwer draw' style.
- Use
DDX_Control
like this in CPP file: DDX_Control(pDX, IDC_PLAYBUTTON, m_btnPlay);
- Then set button's image by calling
SetButtonImage()
function.
#include "KbcButton.h"
class CTestButtonDlg : public CDialog
{
protected:
CKbcButton m_btnPlay;
...
...
}
void CTestButtonDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_PLAYBUTTON, m_btnPlay);
}
BOOL CTestButtonDlg::OnInitDialog()
{
...
...
m_btnPlay.SetButtonImage("play.bmp",RGB(255,255,255));
m_btnPlay.SetToolTipText("Play~!");
m_btnPlay.SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR1));
...
...
}
- Using
new
operation
- Include "KbcButton.h" in header file.
- Declare a
CKbcButton*
variable in header file.
- Create
CKbcButton
instance by using new
operator.
- Call
Create()
function.
- Then set button's image by calling
SetButtonImage()
function.
#include "KbcButton.h"
class CTestButtonDlg : public CDialog
{
protected:
CKbcButton* m_pButton;
...
...
BOOL CTestButtonDlg::OnInitDialog()
{
...
...
CRect rtButton;
CWnd* pWnd = GetDlgItem(IDC_STATIC_SHOW);
pWnd->GetWindowRect(rtButton);
ScreenToClient(rtButton);
m_pButton = new CKbcButton;
m_pButton->Create("CKbcButton", WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,
rtButton, this, NEWBUTTON);
m_pButton->SetButtonImage("show.gif",RGB(0,0,255));
...
...
}
That's all. Isn't it simple?
Make sure that you set 'Owner draw style' to a button.
Thanks
Thanks to Dr. Yovav Gad (CPicture
's author) and The Code Project. :) I learned a lot of things from this site.
History
- Ver 1.0 (11/01/2004)
- Used
CPicture
class supporting JPG, GIF...
- Fixed cursor problem.